Skip to Content

功能

  1. 缓存不同进程间传输的数据,从而能够异步处理
  2. 解耦不同服务,提高系统稳定性和拓展性
  3. 对不稳定的大流量进行削峰处理

组成

Broker

  • 消息中间件的消息存储和转发服务器
  • 每个broker节点都会在启动时遍历Nameserver列表,与对应的服务建立长连接,注册自己的信息,并定时上报

Nameserver

  • 提供了路由管理,服务注册,服务发现的功能
  • 集群中的broker,peoducer,comsumer都需要定时向Nameserver汇报自己的状态,以便于发现彼此,否则会被剔除
  • 可以部署多个Nameserver,集群中的角色需要同时向他们汇报,确保高可用

Producer

  • 随机选择一个Nameserver节点建立长连接,获得topic路由信息
  • 接下来与提供topic的master(只有master才能向写入消息)建立长连接,并定时发送心跳
  • 需要指定GroupName,NameServer,Topic,Tag(可选)
  • 可以选择同步发送和异步发送,异步发送需要在发送时指定成功和失败的回调函数

Comsumer

  • 通过Nameserser获取topic路由信息,连接到对应的broker消费信息
  • 由于Master和Slave都可以读取消息,因此Consumer会与Master和Slave都建立连接进行消费消息
  • 需要指定GroupName,NameServer,Topic,Tag(可选),并注册监听器

核心概念

Message

  • 承载消息
  • 发送消息时,需要指定必须的topic,可选的tag用于过滤消息

Topic

  • 对消息进行逻辑分类
  • 由若干个queue组成
  • 发送和消费消息的时候都需要指定消息

Queue

  • 使用队列存储message,供consumer消费
  • 如果一个topic有四个queue,但是存在五个consumer,那么由于负载均衡策略,有一个consumer不会工作

Tag

  • topic进一步细分,用于过滤消息选择性消费

Message Model

  • 由集群和广播组成
    • 集群模式
      • 每条消息只需要被处理一次,broker只会把消息发送给消费集群中的一个消费者
      • 在消息重投时,不能保证路由到同一台机器上
      • 消费状态由broker维护
    • 广播模式
      • 消费进度由consumer维护
      • 保证每个消费者都消费一次消息
      • 消费失败的消息不会重投

Message Order

  • 由顺序和并发组成

Producer Group

  • 消息生产者组

Consumer Group

  • 消息消费者组

实现

  1. Broker注册到Nameserver
  2. Producder发送信息时从NameServer上获取发送信息的Topic
  3. Producer和所有提供服务的Master建立长连接,并定时发送心跳
  4. Consumer通过NameServer集群获取Topic路由信息
  5. Consuemer与所有的MasterSlave建立长连接,监听新消息
  6. Consumer在消费完成后会进行ACK确认,如果未确认则表示消费失败,此时Broker会采取重试策略(仅集群模式)
Last updated on